{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "import keras\n",
    "from keras.datasets import mnist\n",
    "from keras.utils import to_categorical\n",
    "from keras.layers import Conv2D, Input, GlobalAveragePooling2D,Dense, Activation, Flatten, BatchNormalization\n",
    "from keras.applications.mobilenet import relu6, DepthwiseConv2D\n",
    "from keras import Model\n",
    "from keras import optimizers\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 10)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "(train_x, train_y), (test_x, test_y) = mnist.load_data()\n",
    "train_x = train_x.reshape((60000,28,28,1)) / 255.0\n",
    "test_x = test_x.reshape((10000,28,28,1)) / 255.0\n",
    "\n",
    "train_y = keras.utils.to_categorical(train_y, num_classes = 10)\n",
    "test_y = keras.utils.to_categorical(test_y, num_classes = 10)\n",
    "print (train_y.shape)\n",
    "print (test_y.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### DepthwiseConv2D\n",
    "```py\n",
    "class DepthwiseConv2D(Conv2D):\n",
    "    \"\"\"Depthwise separable 2D convolution.\n",
    "    Depthwise Separable convolutions consist in performing\n",
    "    just the first step in a depthwise spatial convolution\n",
    "    (which acts on each input channel separately).\n",
    "    It does not perform the pointwise convolution (second step).\n",
    "    The `depth_multiplier` argument controls how many\n",
    "    output channels are generated per input channel in the depthwise step.\n",
    "    # Arguments\n",
    "        kernel_size: An integer or tuple/list of 2 integers, specifying the\n",
    "            width and height of the 2D convolution window.\n",
    "            Can be a single integer to specify the same value for\n",
    "            all spatial dimensions.\n",
    "        strides: An integer or tuple/list of 2 integers,\n",
    "            specifying the strides of the convolution along the width and height.\n",
    "            Can be a single integer to specify the same value for\n",
    "            all spatial dimensions.\n",
    "            Specifying any stride value != 1 is incompatible with specifying\n",
    "            any `dilation_rate` value != 1.\n",
    "        padding: one of `\"valid\"` or `\"same\"` (case-insensitive).\n",
    "        depth_multiplier: The number of depthwise convolution output channels\n",
    "            for each input channel.\n",
    "            The total number of depthwise convolution output\n",
    "            channels will be equal to `filterss_in * depth_multiplier`.\n",
    "        data_format: A string,\n",
    "            one of `channels_last` (default) or `channels_first`.\n",
    "            The ordering of the dimensions in the inputs.\n",
    "            `channels_last` corresponds to inputs with shape\n",
    "            `(batch, height, width, channels)` while `channels_first`\n",
    "            corresponds to inputs with shape\n",
    "            `(batch, channels, height, width)`.\n",
    "            It defaults to the `image_data_format` value found in your\n",
    "            Keras config file at `~/.keras/keras.json`.\n",
    "            If you never set it, then it will be \"channels_last\".\n",
    "        activation: Activation function to use\n",
    "            (see [activations](../activations.md)).\n",
    "            If you don't specify anything, no activation is applied\n",
    "            (ie. \"linear\" activation: `a(x) = x`).\n",
    "        use_bias: Boolean, whether the layer uses a bias vector.\n",
    "        depthwise_initializer: Initializer for the depthwise kernel matrix\n",
    "            (see [initializers](../initializers.md)).\n",
    "        bias_initializer: Initializer for the bias vector\n",
    "            (see [initializers](../initializers.md)).\n",
    "        depthwise_regularizer: Regularizer function applied to\n",
    "            the depthwise kernel matrix\n",
    "            (see [regularizer](../regularizers.md)).\n",
    "        bias_regularizer: Regularizer function applied to the bias vector\n",
    "            (see [regularizer](../regularizers.md)).\n",
    "        activity_regularizer: Regularizer function applied to\n",
    "            the output of the layer (its \"activation\").\n",
    "            (see [regularizer](../regularizers.md)).\n",
    "        depthwise_constraint: Constraint function applied to\n",
    "            the depthwise kernel matrix\n",
    "            (see [constraints](../constraints.md)).\n",
    "        bias_constraint: Constraint function applied to the bias vector\n",
    "            (see [constraints](../constraints.md)).\n",
    "    # Input shape\n",
    "        4D tensor with shape:\n",
    "        `(batch, channels, rows, cols)` if data_format='channels_first'\n",
    "        or 4D tensor with shape:\n",
    "        `(batch, rows, cols, channels)` if data_format='channels_last'.\n",
    "    # Output shape\n",
    "        4D tensor with shape:\n",
    "        `(batch, filters, new_rows, new_cols)` if data_format='channels_first'\n",
    "        or 4D tensor with shape:\n",
    "        `(batch, new_rows, new_cols, filters)` if data_format='channels_last'.\n",
    "        `rows` and `cols` values might have changed due to padding.\n",
    "    \"\"\"\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def MobileNetV1(input_shape, k):\n",
    "    inputs = Input(shape=input_shape)\n",
    "    x = Conv2D(filters=32, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu')(inputs)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=64, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), strides=(2,2),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=256, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), strides=(2,2),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=256, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=512, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), strides=(2,2),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=512, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), strides=(2,2),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=1024, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3),padding='same', activation='relu',)(x)\n",
    "    x = Conv2D(filters=1024, kernel_size=(1,1),padding='same', activation='relu')(x)\n",
    "    x = GlobalAveragePooling2D()(x)\n",
    "    x = Dense(1024, activation='relu')(x)\n",
    "    x = Dense(k, activation='softmax')(x)\n",
    "    model = Model(inputs, x)\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def NaiveConvNet(input_shape, k):\n",
    "    inputs = Input(shape=input_shape)\n",
    "    x = Conv2D(filters=32, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu')(inputs)\n",
    "    x = Conv2D(filters=64, kernel_size=(3,3),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(3,3),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(3,3), strides=(2,2),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=256, kernel_size=(3,3), strides=(2,2),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=512, kernel_size=(3,3),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=512, kernel_size=(3,3), strides=(2,2),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=1024, kernel_size=(3,3), strides=(2,2),padding='same', activation='relu')(x)\n",
    "    x = Conv2D(filters=1024, kernel_size=(3,3),padding='same', activation='relu')(x)\n",
    "    x = GlobalAveragePooling2D()(x)\n",
    "    x = Dense(1024, activation='relu')(x)\n",
    "    x = Dense(k, activation='softmax')(x)\n",
    "    model = Model(inputs, x)\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_5 (InputLayer)         (None, 224, 224, 3)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_35 (Conv2D)           (None, 112, 112, 32)      896       \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_22 (Depthwi (None, 112, 112, 32)      320       \n",
      "_________________________________________________________________\n",
      "conv2d_36 (Conv2D)           (None, 112, 112, 64)      2112      \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_23 (Depthwi (None, 112, 112, 64)      640       \n",
      "_________________________________________________________________\n",
      "conv2d_37 (Conv2D)           (None, 112, 112, 128)     8320      \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_24 (Depthwi (None, 56, 56, 128)       1280      \n",
      "_________________________________________________________________\n",
      "conv2d_38 (Conv2D)           (None, 56, 56, 128)       16512     \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_25 (Depthwi (None, 56, 56, 128)       1280      \n",
      "_________________________________________________________________\n",
      "conv2d_39 (Conv2D)           (None, 56, 56, 256)       33024     \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_26 (Depthwi (None, 28, 28, 256)       2560      \n",
      "_________________________________________________________________\n",
      "conv2d_40 (Conv2D)           (None, 28, 28, 256)       65792     \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_27 (Depthwi (None, 28, 28, 256)       2560      \n",
      "_________________________________________________________________\n",
      "conv2d_41 (Conv2D)           (None, 28, 28, 512)       131584    \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_28 (Depthwi (None, 14, 14, 512)       5120      \n",
      "_________________________________________________________________\n",
      "conv2d_42 (Conv2D)           (None, 14, 14, 512)       262656    \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_29 (Depthwi (None, 7, 7, 512)         5120      \n",
      "_________________________________________________________________\n",
      "conv2d_43 (Conv2D)           (None, 7, 7, 1024)        525312    \n",
      "_________________________________________________________________\n",
      "depthwise_conv2d_30 (Depthwi (None, 7, 7, 1024)        10240     \n",
      "_________________________________________________________________\n",
      "conv2d_44 (Conv2D)           (None, 7, 7, 1024)        1049600   \n",
      "_________________________________________________________________\n",
      "global_average_pooling2d_4 ( (None, 1024)              0         \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 1024)              1049600   \n",
      "_________________________________________________________________\n",
      "dense_9 (Dense)              (None, 1000)              1025000   \n",
      "=================================================================\n",
      "Total params: 4,199,528\n",
      "Trainable params: 4,199,528\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "MobileNet_v1_model = MobileNetV1((224,224,3), 1000)\n",
    "MobileNet_v1_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_6 (InputLayer)         (None, 224, 224, 3)       0         \n",
      "_________________________________________________________________\n",
      "conv2d_45 (Conv2D)           (None, 112, 112, 32)      896       \n",
      "_________________________________________________________________\n",
      "conv2d_46 (Conv2D)           (None, 112, 112, 64)      18496     \n",
      "_________________________________________________________________\n",
      "conv2d_47 (Conv2D)           (None, 112, 112, 128)     73856     \n",
      "_________________________________________________________________\n",
      "conv2d_48 (Conv2D)           (None, 56, 56, 128)       147584    \n",
      "_________________________________________________________________\n",
      "conv2d_49 (Conv2D)           (None, 56, 56, 256)       295168    \n",
      "_________________________________________________________________\n",
      "conv2d_50 (Conv2D)           (None, 28, 28, 256)       590080    \n",
      "_________________________________________________________________\n",
      "conv2d_51 (Conv2D)           (None, 28, 28, 512)       1180160   \n",
      "_________________________________________________________________\n",
      "conv2d_52 (Conv2D)           (None, 14, 14, 512)       2359808   \n",
      "_________________________________________________________________\n",
      "conv2d_53 (Conv2D)           (None, 7, 7, 1024)        4719616   \n",
      "_________________________________________________________________\n",
      "conv2d_54 (Conv2D)           (None, 7, 7, 1024)        9438208   \n",
      "_________________________________________________________________\n",
      "global_average_pooling2d_5 ( (None, 1024)              0         \n",
      "_________________________________________________________________\n",
      "dense_10 (Dense)             (None, 1024)              1049600   \n",
      "_________________________________________________________________\n",
      "dense_11 (Dense)             (None, 1000)              1025000   \n",
      "=================================================================\n",
      "Total params: 20,898,472\n",
      "Trainable params: 20,898,472\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "NaiveConvNet_model = NaiveConvNet((224,224,3), 1000)\n",
    "NaiveConvNet_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Simple_MobileNetV1(input_shape, k):\n",
    "    inputs = Input(shape=input_shape)\n",
    "    x = Conv2D(filters=32, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu', name='m_conv_1')(inputs)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3),padding='same', activation='relu', name = 'm_dc_2')(x)\n",
    "    x = Conv2D(filters=64, kernel_size=(1,1),padding='same', activation='relu', name = 'm_pc_2')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), padding='same', activation='relu', name = 'm_dc_3')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(1,1),padding='same', activation='relu', name = 'm_pc_3')(x)\n",
    "    x = DepthwiseConv2D(kernel_size=(3,3), strides=(2,2),padding='same', activation='relu', name = 'm_dc_4')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(1,1),padding='same', activation='relu', name = 'm_pc_4')(x)\n",
    "    x = GlobalAveragePooling2D(name='m_gap')(x)\n",
    "    x = BatchNormalization(name='m_bn_1')(x)\n",
    "    x = Dense(128, activation='relu', name='m_fc1')(x)\n",
    "    x = BatchNormalization(name='m_bc_2')(x)\n",
    "    x = Dense(k, activation='softmax', name='m_output')(x)\n",
    "    model = Model(inputs, x)\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_45 (InputLayer)        (None, 28, 28, 1)         0         \n",
      "_________________________________________________________________\n",
      "m_conv_1 (Conv2D)            (None, 14, 14, 32)        320       \n",
      "_________________________________________________________________\n",
      "m_dc_2 (DepthwiseConv2D)     (None, 14, 14, 32)        320       \n",
      "_________________________________________________________________\n",
      "m_pc_2 (Conv2D)              (None, 14, 14, 64)        2112      \n",
      "_________________________________________________________________\n",
      "m_dc_3 (DepthwiseConv2D)     (None, 14, 14, 64)        640       \n",
      "_________________________________________________________________\n",
      "m_pc_3 (Conv2D)              (None, 14, 14, 128)       8320      \n",
      "_________________________________________________________________\n",
      "m_dc_4 (DepthwiseConv2D)     (None, 7, 7, 128)         1280      \n",
      "_________________________________________________________________\n",
      "m_pc_4 (Conv2D)              (None, 7, 7, 128)         16512     \n",
      "_________________________________________________________________\n",
      "m_gap (GlobalAveragePooling2 (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "m_bn_1 (BatchNormalization)  (None, 128)               512       \n",
      "_________________________________________________________________\n",
      "m_fc1 (Dense)                (None, 128)               16512     \n",
      "_________________________________________________________________\n",
      "m_bc_2 (BatchNormalization)  (None, 128)               512       \n",
      "_________________________________________________________________\n",
      "m_output (Dense)             (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 48,330\n",
      "Trainable params: 47,818\n",
      "Non-trainable params: 512\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "Simple_MobileNetV1_model = Simple_MobileNetV1((28,28,1), 10)\n",
    "Simple_MobileNetV1_model.summary()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "60000/60000 [==============================] - 73s 1ms/step - loss: 0.5256 - acc: 0.8251\n",
      "Epoch 2/10\n",
      "60000/60000 [==============================] - 76s 1ms/step - loss: 0.2198 - acc: 0.9326\n",
      "Epoch 3/10\n",
      "60000/60000 [==============================] - 78s 1ms/step - loss: 0.1668 - acc: 0.9492\n",
      "Epoch 4/10\n",
      "60000/60000 [==============================] - 76s 1ms/step - loss: 0.1414 - acc: 0.9583\n",
      "Epoch 5/10\n",
      "60000/60000 [==============================] - 67s 1ms/step - loss: 0.1210 - acc: 0.9638\n",
      "Epoch 6/10\n",
      "60000/60000 [==============================] - 66s 1ms/step - loss: 0.1099 - acc: 0.9678\n",
      "Epoch 7/10\n",
      "60000/60000 [==============================] - 71s 1ms/step - loss: 0.1056 - acc: 0.9701\n",
      "Epoch 8/10\n",
      "60000/60000 [==============================] - 65s 1ms/step - loss: 0.0976 - acc: 0.9721\n",
      "Epoch 9/10\n",
      "60000/60000 [==============================] - 63s 1ms/step - loss: 0.0924 - acc: 0.9732\n",
      "Epoch 10/10\n",
      "60000/60000 [==============================] - 64s 1ms/step - loss: 0.0899 - acc: 0.9746\n"
     ]
    }
   ],
   "source": [
    "Simple_MobileNetV1_model.compile(optimizer=optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['acc'])\n",
    "Simple_MobileNetV1_history = Simple_MobileNetV1_model.fit(train_x, train_y, epochs=10, batch_size=8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Simple_NaiveConvNet(input_shape, k):\n",
    "    inputs = Input(shape=input_shape)\n",
    "    x = Conv2D(filters=32, kernel_size=(3,3), strides=(2,2), padding='same', activation='relu', name='n_conv_1')(inputs)\n",
    "    x = Conv2D(filters=64, kernel_size=(3,3),padding='same', activation='relu', name='n_conv_2')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(3,3),padding='same', activation='relu', name='n_conv_3')(x)\n",
    "    x = Conv2D(filters=128, kernel_size=(3,3), strides=(2,2),padding='same', activation='relu', name='n_conv_4')(x)\n",
    "    x = GlobalAveragePooling2D(name='n_gap')(x)\n",
    "    x = BatchNormalization(name='n_bn_1')(x)\n",
    "    x = Dense(128, activation='relu', name='n_fc1')(x)\n",
    "    x = BatchNormalization(name='n_bc_2')(x)\n",
    "    x = Dense(k, activation='softmax', name='n_output')(x)\n",
    "    model = Model(inputs, x)\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_44 (InputLayer)        (None, 28, 28, 1)         0         \n",
      "_________________________________________________________________\n",
      "n_conv_1 (Conv2D)            (None, 14, 14, 32)        320       \n",
      "_________________________________________________________________\n",
      "n_conv_2 (Conv2D)            (None, 14, 14, 64)        18496     \n",
      "_________________________________________________________________\n",
      "n_conv_3 (Conv2D)            (None, 14, 14, 128)       73856     \n",
      "_________________________________________________________________\n",
      "n_conv_4 (Conv2D)            (None, 7, 7, 128)         147584    \n",
      "_________________________________________________________________\n",
      "n_gap (GlobalAveragePooling2 (None, 128)               0         \n",
      "_________________________________________________________________\n",
      "n_bn_1 (BatchNormalization)  (None, 128)               512       \n",
      "_________________________________________________________________\n",
      "n_fc1 (Dense)                (None, 128)               16512     \n",
      "_________________________________________________________________\n",
      "n_bc_2 (BatchNormalization)  (None, 128)               512       \n",
      "_________________________________________________________________\n",
      "n_output (Dense)             (None, 10)                1290      \n",
      "=================================================================\n",
      "Total params: 259,082\n",
      "Trainable params: 258,570\n",
      "Non-trainable params: 512\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "Simple_NaiveConvNet_model = Simple_NaiveConvNet((28,28,1), 10)\n",
    "Simple_NaiveConvNet_model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/10\n",
      "60000/60000 [==============================] - 139s 2ms/step - loss: 0.2385 - acc: 0.9263\n",
      "Epoch 2/10\n",
      "60000/60000 [==============================] - 146s 2ms/step - loss: 0.1085 - acc: 0.9688\n",
      "Epoch 3/10\n",
      "60000/60000 [==============================] - 139s 2ms/step - loss: 0.0833 - acc: 0.9765\n",
      "Epoch 4/10\n",
      "60000/60000 [==============================] - 141s 2ms/step - loss: 0.0720 - acc: 0.9797\n",
      "Epoch 5/10\n",
      "60000/60000 [==============================] - 141s 2ms/step - loss: 0.0686 - acc: 0.9805\n",
      "Epoch 6/10\n",
      "60000/60000 [==============================] - 140s 2ms/step - loss: 0.0593 - acc: 0.9834\n",
      "Epoch 7/10\n",
      "60000/60000 [==============================] - 134s 2ms/step - loss: 0.0531 - acc: 0.9852\n",
      "Epoch 8/10\n",
      "60000/60000 [==============================] - 138s 2ms/step - loss: 0.0513 - acc: 0.9858\n",
      "Epoch 9/10\n",
      "60000/60000 [==============================] - 142s 2ms/step - loss: 0.0476 - acc: 0.9869\n",
      "Epoch 10/10\n",
      "60000/60000 [==============================] - 160s 3ms/step - loss: 0.0463 - acc: 0.9877\n"
     ]
    }
   ],
   "source": [
    "Simple_NaiveConvNet_model.compile(optimizer=optimizers.RMSprop(0.001), loss='categorical_crossentropy', metrics=['acc'])\n",
    "Simple_NaiveConvNet_history = Simple_NaiveConvNet_model.fit(train_x, train_y, epochs=10, batch_size=8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "s_acc = Simple_NaiveConvNet_history.history['acc']\n",
    "s_loss = Simple_NaiveConvNet_history.history['loss']\n",
    "\n",
    "m_acc = Simple_MobileNetV1_history.history['acc']\n",
    "m_loss = Simple_MobileNetV1_history.history['loss']\n",
    "\n",
    "epochs = range(1, len(s_acc)+1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12e715940>"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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RES+FpF1InJlA+uPisj9/ircZ1kZEBELyemt/tHGBJuIiAimT5/O//zP/xy37p133uH8889n+PDhXHrppRw4cABwAnHGjBkUFhbSr18/PB4PAMXFxfTp04eKigp27NjBpEmTGDFiBGPGjOGbb7457v0fe+wxZs+ezdlnnw1AeHg4P/mJMyJv165dTJgwgdTUVC655BJ2794NwO23387dd9/N6NGjGTBgAAsXLgRg2rRp/Otftfdzuv3222vWpaWlER8fz+LFi4+rYfXq1YwbN44RI0Zw+eWXk5OTw8KFC8nMzOT73/8+w4YNo6Sk5Lj9FixYwD333EPfvn1ZuXJlTfuqVasYPXo0aWlpjBw5kiNHjlBVVcX999/POeecQ2pqKk899ZQP/2V81+joHREJB54BJuLc83aViCxyb5xS7dfA66r6ZxEZjHPDlf5e6/8beN9vVTdFVgb0HQUR0QH5eGNawm/f2cimfUV+fc/BveJ46DtDGt3upz/9KampqTzwwAN12i+66CI+//xzRITnnnuOxx57jD/96U816+Pj4xk2bBjLli1j/PjxvPvuu1x++eVERkYyffp0nn32WQYOHMgXX3zBXXfdxZIlS+q8/4YNG07YnTNz5kxuu+02brvtNubPn8/dd9/NW2+9BUBOTg4rVqzgm2++YfLkydxwww1MnTqV119/nauuuory8nI+/vhj/vznP/PFF18AMHv2bB588EEmTpxY8xkVFRXMnDmTt99+m6SkJF577TVmz57N/Pnzefrpp3n88cdJTz/+4LK0tJSPPvqIv/zlLxQUFLBgwQJGjx5NeXk5U6dO5bXXXuO8886jqKiI2NhY5s2bx65du1izZg0RERHk5+c3+t+kKXwZsjkS2K6qOwFE5FVgCnXvdatAnLscD9T8nSMi1wBZQLE/Cm6Sowfh4CYYemOrf7QxwSouLo5bb72V//3f/yU2NramPTs7m6lTp5KTk0N5eXmDQwqrQ278+PG8+uqr3HXXXRw9epTPPvuMG2+s/XdaVlbWpJpWrlzJm2++CcAtt9xS5xfSNddcQ1hYGIMHD6756+OKK67gnnvuoaysjH//+9+MHTu2zncZO9Y5B7hixYqati1btrBhw4aaXwRVVVX07Nmz0dreffddxo8fT2xsLNdffz2/+93veOKJJ9iyZQs9e/bkvPPOA5yfK8BHH33E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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, s_acc, label='Naive ConvNet Acc')\n",
    "plt.plot(epochs, m_acc, label='MobileNet Acc')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x12e981710>"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//HXZ2aSTBaSAAlrgCTIFiCAbBYREhZBQLCLBetG8dZ6raK3eq0t1+ql2nqtdal6pe79Va8bVcGtFkEQVFSoiOxrgAhCSEiA7JP5/v44k5CVDMkkJ5n5PB+PPOZsM+fjqO9z5nu+53vEGINSSqng4rC7AKWUUoGn4a6UUkFIw10ppYKQhrtSSgUhDXellApCGu5KKRWENNyVUioIabgrpVQQ0nBXSqkg5LJrxwkJCSY5Odmu3SulVLu0cePG48aYxMa2sy3ck5OT2bBhg127V0qpdklEDviznTbLKKVUENJwV0qpIKThrpRSQci2NnelVE3l5eVkZ2dTUlJidymqDXC73SQlJREWFtak92u4K9VGZGdn06FDB5KTkxERu8tRNjLGkJubS3Z2NikpKU36DG2WUaqNKCkpoXPnzhrsChGhc+fOzfoVp+GuVBuiwa4qNfe/hfYX7oe+gBV3gz4eUCmlGtT+wv3I1/DJI5C3z+5KlAo6IsJtt91WNf/ggw9yzz33nPU9y5cv5/777w/I/t9//31GjRpFWloaI0aMqFFLIKxevRoR4e23365aNmvWLFavXn3W973wwgscPny43nXz589n6dKlgSwzINpfuKdmWq/7VttahlLBKCIigjfeeIPjx4/7/Z7Zs2dz5513NnvfW7Zs4aabbuLFF19k27ZtbNiwgfPOO6/Zn1tbUlIS99133zm952zh3la1v3Dv3Bdik2DfR3ZXolTQcblcXH/99Tz88MN11r399tuMHTuWESNGMGXKFI4ePQpYwXfTTTdRUFBAnz598Hq9ABQWFtKrVy/Ky8vZu3cv06dPZ+TIkVx00UXs2LGjzuc/8MADLFq0iIEDBwLgdDr593//dwCysrKYNGkS6enpTJ48mYMHDwLWWfPChQsZN24cqampVWfQ8+bN491336367Opn18OGDSMuLo4VK1bUqWHjxo1MnDiRkSNHMm3aNI4cOcLSpUvZsGEDV155JcOHD6e4uLjB72/lypWMGDGCoUOHsmDBAkpLSwG48847SUtLIz09ndtvvx2A119/nSFDhjBs2DAmTJhwtn8tTdL+ukKKQN8M2P42eCvA4bS7IqUC7r/f3sq2wycD+plpPWK5+9LBjW73i1/8gvT0dO64444ay8ePH8/69esREZ555hkeeOAB/vSnP1Wtj4uLY/jw4axZs4bMzEzeeecdpk2bRlhYGNdffz1LliyhX79+fP7559x4442sWrWqxudv2bKlwWaYm2++mWuvvZZrr72W5557joULF/LWW28BcOTIEdatW8eOHTuYPXs2P/rRj5g7dy6vvfYaM2fOpKysjJUrV/Lkk0/y+eefA7Bo0SLuuusupk6dWrWP8vJybr75ZpYtW0ZiYiKvvvoqixYt4rnnnuPxxx/nwQcfZNSoUQ1+byUlJcyfP5+VK1fSv39/rrnmGp588kmuvvpq3nzzTXbs2IGIkJ+fD8DixYv54IMP6NmzZ9WyQGp/Z+5gNc2UFMDhTXZXolTQiY2N5ZprruHPf/5zjeXZ2dlMmzaNoUOH8sc//pGtW7fWee/cuXN59dVXAXjllVeYO3cup0+f5tNPP+Xyyy9n+PDh/PznP+fIkSPnVNNnn33GT37yEwCuvvpq1q1bV7Xusssuw+FwkJaWVvVr4pJLLuGjjz6itLSU999/nwkTJhAZGVn1nsoz5eqfs3PnTrZs2cLUqVMZPnw49957L9nZ2X7XuHPnTlJSUujfvz8A1157LR9//DFxcXG43W6uu+463njjDaKiogC48MILmT9/Pk8//TQVFRXn9H34o/2duQOkTLRe962CpJH21qJUC/DnDLsl3XrrrZx//vn89Kc/rVp2880388tf/pLZs2ezevXqei+0zp49m9/85jfk5eWxceNGJk2aRGFhIfHx8WzadPaTscGDB7Nx40aGDRt2TrVGRERUTRtfLzq3201GRgYffPABr776KvPmzavzvkWLFnHvvfficrmq3jt48GA+++yzc9p/Y1wuF1988QUrV65k6dKlPP7446xatYolS5bw+eef8+677zJy5Eg2btxI586dA7bf9nnmHpMI3YbCvjV2V6JUUOrUqRM//vGPefbZZ6uWFRQU0LNnTwD++te/1vu+mJgYRo8ezS233MKsWbNwOp3ExsaSkpLC66+/Dlgh+vXXX9d573/+53/y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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, s_loss, label='Naive ConvNet loss')\n",
    "plt.plot(epochs, m_loss, label='MobileNet loss')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
